To finalize version information, remove unnecessary information and/or disable unnecessary functionality, a program or operating system is promoted before it is shipped to end users. In some conventional promotion techniques, promoting a program or operating system requires copying an entire source tree (a hierarchical collection of files and directories that holds the source code to a body of software). Software components within the source tree are then modified to change file names, change the values of symbols within files, disable functions, etc. Once the files within the source tree have been modified, the software is recompiled and relinked. The promoted software can then be shipped to the end user. In other conventional promotion techniques, version information is contained within a single version file. A program or operating system is promoted by modifying the contents of the version file, recompiling the modified version file and relinking the modified version file.
Conventional promotion techniques introduce a number of problems. First, copying the source tree requires considerable time and resources. The extensive time and resources that are required to copy source trees make it so that promotion can only be performed on an infrequent basis. Therefore, developers often are not able to test the promoted version before it is shipped. Furthermore, changing bits within software introduces risk. Recompiling software and relinking software to complete image promotion both change numerous bits of the software, and can result in software that is inoperable or that functions at a suboptimal level. Once a build has been successfully compiled and linked, it is undesirable to recompile and/or relink the build or any file included in the build. However, in conventional promotion processes, such recompiling and relinking is necessary. Moreover, the concepts of performing a system build and performing a promotion are typically intertwined such that when a system build is performed, promotion is also performed. Such intertwining further reduces a developer's ability to check promoted software before it is sent to end users.